// 引入express
var express = require('express');

// 引入cors
const cors = require('cors')

// 引入token
var Token = require('./utils/jwtutil')

// 引入路由
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var productRouter = require('./routes/products');

// 初始化express
var app = express();

// 实例化跨域资源请求
app.use(cors())

// express.json() 是 Express 从 v4.16.0 开始的内置中间件功能。 它解析传入的 JSON 请求并将解析的数据放入 req.body。
app.use(express.json())

/**
 *  extended: false：表示使用系统模块querystring来处理，也是官方推荐的
    extended: true：表示使用第三方模块qs来处理
    从功能性来讲，qs比querystring要更强大，所以这里可以根据项目的实际需求来考虑
 */
app.use(express.urlencoded({ extended: false }))

/**
 * 为了提供诸如图像、CSS 文件和 JavaScript 文件之类的静态文件，请使用 Express 中的 express.static 内置中间件函数。设置public中的html,css,images等可以对外开放
 */
app.use(express.static('public'))

// 请求拦截，all所有请求方法，表示任何路径都将到达这里
app.all('/*', function (req, res, next) {
    // 过滤不需要的token认证
    let arr = ['/users/register','/users/login']
    if (arr.indexOf(req.url) !== -1) {
        next()
        return
    }
    // token认证
    let token = req.headers.authorization
    if (!token) {
        res.send({
            code: -1,
            info:'token不存在！'
        })
        return
    }
    let tokenObj = Token.decrypt(token)
    if (!tokenObj.token) {
        res.send({
            code: -1,
            info:'token验证失败！'
        })
        return 
    }
    next()
})

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/products',productRouter)

module.exports = app;
